package com.ea.common.response;


import com.ea.common.enums.OperationResultCode;
import com.ea.common.enums.ResponseStatusEnums;

import java.io.Serializable;
import java.util.HashMap;
import java.util.Objects;

/**
 * @author NAME-L
 * @Description TODO
 * @className JsonResult
 * @date 2022-12-01 21:20:23
 */
public class JsonResult extends HashMap<String, Object> implements Serializable {
    private static final long serialVersionUID = 1L;

    public static final String DATA = "data";

    private static final String ERRORCODE = "errorCode";

    private static final String ERRORMSG = "errorMsg";


    public JsonResult() {
    }

    public JsonResult(String errorCode, String msg) {
        super.put(ERRORCODE, errorCode);
        super.put(ERRORMSG, msg);
    }

    public JsonResult(String errorCode, String errorMsg, Object data) {
        super.put(ERRORCODE, errorCode);
        super.put(ERRORMSG, errorMsg);
        if (Objects.nonNull(data)) {
            super.put(DATA, data);
        }
    }

    /**
     * 返回自定义操作消息
     *
     * @param errorCode 返回编码
     * @param msg       返回内容
     * @return 成功消息
     */
    public static JsonResult withoutData(String errorCode, String msg) {
        return new JsonResult(errorCode, msg);
    }

    /**
     * 返回操作消息
     *
     * @param errorCode 返回状态码
     * @param msg       返回内容
     * @param data      数据对象
     * @return 成功消息
     */
    public static JsonResult returnMethod(String errorCode, String msg, Object data) {
        return new JsonResult(errorCode, msg, data);
    }

    /**
     * 返回查询成功消息
     *
     * @param data 数据对象
     * @return 成功消息
     */
    public static JsonResult loginSuccessFul(Object data) {
        return new JsonResult(ResponseStatusEnums.SUCCESS.getCode(), "登录成功", data);
    }

    /**
     * 返回查询成功消息
     *
     * @return 成功消息
     */
    public static JsonResult loginSuccessFul() {
        return new JsonResult(ResponseStatusEnums.SUCCESS.getCode(), "登录成功");
    }

    /**
     * 返回查询成功消息
     *
     * @param data 数据对象
     * @return 成功消息
     */
    public static JsonResult querySuccessFul(Object data) {
        return new JsonResult(ResponseStatusEnums.SUCCESS.getCode(), "查询成功", data);
    }

    /**
     * 返回添加成功消息
     *
     * @return 成功消息
     */
    public static JsonResult insertSuccessFul() {
        return new JsonResult(ResponseStatusEnums.CREATED.getCode(), "添加成功");
    }

    /**
     * 返回删除成功消息
     *
     * @return 成功消息
     */
    public static JsonResult delSuccessFul() {
        return new JsonResult(ResponseStatusEnums.CREATED.getCode(), "删除成功");
    }

    /**
     * 返回更新成功消息
     *
     * @return 成功消息
     */
    public static JsonResult updateSuccessFul() {
        return new JsonResult(ResponseStatusEnums.CREATED.getCode(), "更新成功");
    }

    /**
     * 返回操作成功消息
     *
     * @return 成功消息
     */
    public static JsonResult doSuccessful() {
        return new JsonResult(ResponseStatusEnums.SUCCESS.getCode(), "操作成功");
    }

    /**
     * 返回操作成功消息
     *
     * @return 成功消息
     */
    public static JsonResult doSuccessful(Object data) {
        return new JsonResult(ResponseStatusEnums.SUCCESS.getCode(), "操作成功", data);
    }

    /**
     * 返回操作成功消息
     *
     * @return 成功消息
     */
    public static JsonResult doSuccessful(String msg) {
        return new JsonResult(ResponseStatusEnums.SUCCESS.getCode(), msg);
    }


    /**
     * 返回操作成功消息
     *
     * @return 成功消息
     */
    public static JsonResult doSuccessful(String msg, Object data) {
        return new JsonResult(ResponseStatusEnums.SUCCESS.getCode(), msg, data);
    }

    /**
     * 返回操作失败消息
     *
     * @return 成功消息
     */
    public static JsonResult doFailed() {
        return new JsonResult(ResponseStatusEnums.DO_FAILED.getCode(), "操作失败，请联系管理员！");
    }

    /**
     * 返回操作失败消息
     *
     * @return 成功消息
     */
    public static JsonResult doFailed(String msg) {
        return new JsonResult(ResponseStatusEnums.DO_FAILED.getCode(), msg);
    }

    /**
     * 返回操作失败消息
     *
     * @return 成功消息
     */
    public static JsonResult doFailed(String msg, Object data) {
        return new JsonResult(ResponseStatusEnums.DO_FAILED.getCode(), msg, data);
    }

    /**
     * 返回删除失败消息
     *
     * @return 成功消息
     */
    public static JsonResult delFailed() {
        return new JsonResult(ResponseStatusEnums.DO_FAILED.getCode(), "删除失败");
    }

    /**
     * 返回登录失败消息
     *
     * @return 失败消息
     */
    public static JsonResult loginFail() {
        return new JsonResult(ResponseStatusEnums.NO_LOGIN.getCode(), "登录失败");
    }

    /**
     * 返回登录失败消息
     *
     * @return 失败消息
     */
    public static JsonResult loginOut() {
        return new JsonResult(ResponseStatusEnums.CREATED.getCode(), "退出成功");
    }

    /**
     * 返回登录失败消息
     *
     * @return 失败消息
     */
    public static JsonResult loginForbidden() {
        return new JsonResult(ResponseStatusEnums.NOT_ALLOW.getCode(), "账号已封禁，无法登录，请联系管理员处理！");
    }

    /**
     * 返回系统异常消息
     *
     * @return 返回异常消息
     */
    public static JsonResult systemError() {
        return new JsonResult(ResponseStatusEnums.ERROR.getCode(), "系统异常");
    }


    /**
     * 返回自定义系统异常消息
     *
     * @return 返回自定义系统异常消息
     */
    public static JsonResult systemError(String msg) {
        return new JsonResult(ResponseStatusEnums.ERROR.getCode(), msg);
    }


    /**
     * 返回系统异常消息
     *
     * @return 返回异常消息
     */
    public static JsonResult paramsError() {
        return new JsonResult(ResponseStatusEnums.ERROR.getCode(), "参数异常");
    }


    /**
     * 返回归属异常消息
     *
     * @return 返回异常消息
     */
    public static JsonResult ownerError() {
        return new JsonResult(ResponseStatusEnums.NOT_ALLOW.getCode(), "非法访问");
    }


    public static JsonResult errorData(String errorCode, String msg) {
        return new JsonResult(errorCode, msg);
    }

    public static <T> JsonResult errorData(String errorCode, String msg, T data) {
        return new JsonResult(errorCode, msg, data);
    }

    public static JsonResult errorData(OperationResultCode code) {
        return new JsonResult(code.getCode(), code.getMsg());
    }

}
